package br.ucb.cesbdao.model.impl;

import java.sql.SQLException;
import java.util.ArrayList;

import lombok.Getter;
import lombok.Setter;

import org.apache.log4j.Logger;

import br.ucb.cesbdao.beans.Encaminhamento;
import br.ucb.cesbdao.model.EncaminhamentoModel;
import br.ucb.cesbdao.persistencia.dao.EncaminhamentoDAO;
import br.ucb.cesbdao.persistencia.factory.FactoryConnection;
import br.ucb.cesbdao.persistencia.factory.FactoryDAO;
import br.ucb.cesbdao.servicos.Servicos;

public class EncaminhamentoModelImpl implements EncaminhamentoModel{

	private Logger logger = Servicos.carregaLog(EncaminhamentoModelImpl.class);
	@Getter @Setter
	private EncaminhamentoDAO dao;
	
	public EncaminhamentoModelImpl() {
	}
	
	@Override
	public void addEncaminhamento(Encaminhamento encaminhamento) {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			getDao().addEncaminhamento(encaminhamento);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}

	@Override
	public void addEncaminhamento(String descricao) {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			getDao().addEncaminhamento(descricao);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}

	@Override
	public void delEncaminhamento(int id) {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			getDao().delEncaminhamento(id);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}

	@Override
	public Encaminhamento getByIdEncaminhamento(int id) {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getByIdEncaminhamento(id);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<Encaminhamento> getAll() {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getAll();
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<Encaminhamento> getByIdAtendimento(int idAtendimento) {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getByIdAtendimento(idAtendimento);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<Encaminhamento> getByNotInAtendimento(int idAtendimento) {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getByNotInAtendimento(idAtendimento);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<Encaminhamento> getByDesc(String desc) {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getByDesc(desc);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public void upDesc(String desc, int idTipoEncaminha) {
		try{
			setDao(FactoryDAO.getDaoEncaminhamento(FactoryConnection.getInstance().criaConexao()));
			getDao().upDesc(desc, idTipoEncaminha);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}	
}
